// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
// import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include "../SQLStatementImpl.h"
#include "../SQLReplaceable.h"
#include "SQLShowStatement.h"

class SQLName;
class SQLExpr;
class SQLASTVisitor;
class SQLObject;

class SQLShowColumnsStatement 
:virtual public SQLStatementImpl, 
virtual public SQLShowStatement,
 virtual public SQLReplaceable
{
public:
  BOOL_ptr full;

  SQLName_ptr table;
  SQLName_ptr database;
  SQLExpr_ptr like;
  SQLExpr_ptr where;

  SHAREDOBJECT(SQLShowColumnsStatement);
  BOOL_ptr isFull();

  void setFull(BOOL_ptr full);

  SQLName_ptr getTable();

  void setTable(SQLName_ptr table);

  SQLName_ptr getDatabase();

  void setDatabase(SQLName_ptr database);

  SQLExpr_ptr getLike();

  void setLike(SQLExpr_ptr like);

  SQLExpr_ptr getWhere();

  void setWhere(SQLExpr_ptr where);

  void accept0(SQLASTVisitor_ptr visitor);

  SQLObject_list_ptr  getChildren();

  // @Override
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target) override;
};
